<!DOCTYPE html>
<title>Document#exitFullscreen() called twice</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../trusted-click.js"></script>
<div id="log"></div>
<script>
async_test(t => {
  const div = document.querySelector("div");

  document.onfullscreenchange = t.step_func(() => {
    // We are now in fullscreen.
    assert_equals(document.fullscreenElement, div);

    // Exit fullscreen twice.
    document.exitFullscreen();
    assert_equals(document.fullscreenElement, div, "fullscreenElement after first exitFullscreen()");
    const secondPromise = document.exitFullscreen();
    assert_equals(document.fullscreenElement, div, "fullscreenElement after second exitFullscreen()");

    document.onfullscreenchange = t.step_func(event => {
      assert_equals(document.fullscreenElement, null);
      // Ensure that there's only one fullscreenchange event.
      document.onfullscreenchange = t.unreached_func("second fullscreenchange event");
      t.step_timeout(() => {
        // Done, but if a promise was returned, assert that it is resolved and
        // not rejected. This test does not fail if promises aren't implemented.
        if (secondPromise) {
          secondPromise.then(t.step_func_done(), t.unreached_func("second promise rejected"));
        } else {
          t.done();
        }
      }, 0);
    });
  });
  document.onfullscreenerror = t.unreached_func("fullscreenerror event");

  trusted_request(t, div);
});
</script>
